#! /bin/bash

# 获取环境变量
PLAY_HOME=/opt/playground

function sshFreeLogin()
{
 #1.检测expect服务是否存在，不存在则使用yum安装expect
 expectIsExists=`rpm -qa | grep expect` 
 if [ -z $expectIsExists ]
 then
      yum -y install expect
 fi

 #2.密钥对不存在则创建密钥
 [ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P "" -f /root/.ssh/id_rsa

# 删除远程key
# ssh-keygen -f "/root/.ssh/known_hosts" -R node01

 while read line;do
       #提取文件中的hostname
       hostname=`echo $line | cut -d " " -f2`
       #提取文件中的用户名
       user_name=`echo $line | cut -d " " -f3`
       #提取文件中的密码
       pass_word=`echo $line | cut -d " " -f4`

       set timeout -1
       expect << EOF
              #复制公钥到目标主机
              spawn ssh-copy-id $hostname
              expect {
                      #expect实现自动输入密码
                      "yes/no" { send "yes\n";exp_continue } 
                      "password" { send "$pass_word\n";exp_continue }
                      eof
              }
EOF
 # 读取存储ip的文件 
 done < $PLAY_HOME/host_ip.txt
 
}


check_ssh_config() {
    flag=0
    while read line; do
        # 提取文件中的hostname
        hostname=$(echo "$line" | cut -d " " -f2)
        # 提取文件中的用户名
        user_name=$(echo "$line" | cut -d " " -f3)
        # 提取文件中的密码
        # pass_word=$(echo "$line" | cut -d " " -f4)

        # 使用ssh命令尝试登录目标主机
        ssh_result=$(ssh -o BatchMode=yes -o ConnectTimeout=5 "$user_name@$hostname" echo success 2>&1)

        if [[ $ssh_result == "success" ]]; then
            echo "节点 `hostname` 配置免密登录成功"
        else
            echo "节点 `hostname` 配置免密登录失败，请手动使用 ssh-copy-id $hostname 配置"
            flag=1
        fi
    done < "$PLAY_HOME/host_ip.txt"

    if [[ $flag -eq 1 ]]; then
        echo "存在节点免密登录配置失效，请检查并重新配置"
        exit 1
    fi
}


# 判断输入参数并执行相应操作
if [ "$1" == "do" ]; then
    sshFreeLogin
elif [ "$1" == "check" ]; then
    check_ssh_config
else
    echo "无效的参数，请输入do或check参数！"
fi